package com.note.feng.leetcode.algorithms.easy.ten;

import java.util.Arrays;

public class ThousandFourtySix {
    /**
     * 1046 最后一块石头的重量
     * 有一堆石头，每块石头的重量都是正整数。
     *
     * 每一回合，从中选出两块 最重的 石头，然后将它们一起粉碎。假设石头的重量分别为 x 和 y，且 x <= y。那么粉碎的可能结果如下：
     *
     * 如果 x == y，那么两块石头都会被完全粉碎；
     * 如果 x != y，那么重量为 x 的石头将会完全粉碎，而重量为 y 的石头新重量为 y-x。
     * 最后，最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下，就返回 0。
     *
     * 示例：
     *
     * 输入：[2,7,4,1,8,1]
     * 输出：1
     * 解释：
     * 先选出 7 和 8，得到 1，所以数组转换为 [2,4,1,1,1]，
     * 再选出 2 和 4，得到 2，所以数组转换为 [2,1,1,1]，
     * 接着是 2 和 1，得到 1，所以数组转换为 [1,1,1]，
     * 最后选出 1 和 1，得到 0，最终数组转换为 [1]，这就是最后剩下那块石头的重量。
     *
     * 提示：
     *
     * 1 <= stones.length <= 30
     * 1 <= stones[i] <= 1000
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/last-stone-weight
     */
    /**
     * 解法：指针 + 排序
     * index 表示数组当前的有效数据的最大下标，
     * 数据排序，排序后取最大下标值和前一个值，若两个值相等，index - 2，否则，index - 1 ，index-1 下标的值改为两个元素的差；
     * 重复上面步骤，直到 index <= 0;
     * @param stones
     * @return
     */
    public static int lastStoneWeight(int[] stones) {
        int len =stones.length;
        if(len == 1){
            return stones[0];
        }
        int index = len - 1;
        while (index > 0){
            Arrays.sort(stones);
            System.out.println("a==" + Arrays.toString(stones) + ", index=" + index);
            int a = stones[index];
            int b = stones[index - 1];
            if(a == b){
                index -= 2;
            }else{
                stones[index - 1] = a - b;
                index --;
            }
            System.out.println("b==" + Arrays.toString(stones) + ", index=" + index);
        }
        return index == 0 ? stones[0] : 0;
    }

    public static void main(String[] args) {
        ThousandFourtySix.lastStoneWeight(new int[]{1,2,3,4,5,6,700});
    }
}
